package main

import (
	"flag"
	"fmt"
	"os"

	"gopkg.in/yaml.v3"
)

type Config struct {
	Domain      string `yaml:"domain"`
	Target      string `yaml:"target"`
	Model       string `yaml:"model"`
	TargetModel string `yaml:"target_model"`
	CAFile      string `yaml:"ca_file"`
	CAKeyFile   string `yaml:"ca_key_file"`
	APIKey      string `yaml:"api_key"`
}

func getDefaultConfig() Config {
	return Config{
		Domain:      "api.deepseek.com",
		Target:      "https://your-oneapi-base-url",
		Model:       "my-model",
		TargetModel: "o4-nano",
		CAFile:      "cert/ca.pem",
		CAKeyFile:   "cert/ca.key",
		APIKey:      "",
	}
}

func loadConfig() (Config, error) {
	// 1. 先获取默认配置
	config := getDefaultConfig()
	
	// 2. 从配置文件读取配置（覆盖默认值）
	configPath := "config.yaml"
	if _, err := os.Stat(configPath); err == nil {
		data, err := os.ReadFile(configPath)
		if err != nil {
			return config, fmt.Errorf("读取配置文件失败: %v", err)
		}
		
		if err := yaml.Unmarshal(data, &config); err != nil {
			return config, fmt.Errorf("解析配置文件失败: %v", err)
		}
		fmt.Printf("从配置文件加载配置: %s\n", configPath)
	} else {
		fmt.Printf("配置文件 %s 不存在，使用默认配置\n", configPath)
	}
	
	// 3. 解析命令行参数（覆盖配置文件和默认值）
	domain := flag.String("d", "", "域名")
	target := flag.String("t", "", "目标地址")
	model := flag.String("m", "", "模型")
	targetModel := flag.String("M", "", "目标模型")
	caFile := flag.String("ca", "", "CA证书文件路径")
	caKeyFile := flag.String("cakey", "", "CA私钥文件路径")
	apiKey := flag.String("ak", "", "API密钥")
	flag.Parse()
	
	// 命令行参数优先级最高
	if *domain != "" {
		config.Domain = *domain
	}
	if *target != "" {
		config.Target = *target
	}
	if *model != "" {
		config.Model = *model
	}
	if *targetModel != "" {
		config.TargetModel = *targetModel
	}
	if *caFile != "" {
		config.CAFile = *caFile
	}
	if *caKeyFile != "" {
		config.CAKeyFile = *caKeyFile
	}
	if *apiKey != "" {
		config.APIKey = *apiKey
	}
	
	return config, nil
}